package tum0r.webengine.defaults.command

import tum0r.webengine.annotations.Command
import tum0r.webengine.config.DatabaseConfig
import tum0r.webengine.extension.check
import tum0r.webengine.extension.errorLog
import tum0r.webengine.extension.infoLog

/**
 * 说明: 数据库配置命令
 *
 * 创建者: tum0r
 *
 * 时间: 2021/8/23 22:20
 */
@Command
class DatabaseCommand {

    /**
     * 检查下标是否合法
     *
     * @param[index] 数据库信息的下标
     */
    private fun checkCount(index: Int): Boolean {
        if (index < 0 || index >= DatabaseConfig.DATABASE_CONNECT_INFO.size) {
            "设置失败，数据库连接信息数目[${DatabaseConfig.DATABASE_CONNECT_INFO.size}]".errorLog()
            return false
        }
        return true
    }

    /**
     * 设置数据库连接地址
     *
     * @param[index] 数据库信息的下标
     * @param[host] 地址
     */
    fun setConnectHost(index: Int, host: String) {
        if (!checkCount(index) || !host.check("数据库地址")) return
        DatabaseConfig.DATABASE_CONNECT_INFO[index].host = host
        "数据库地址设置为[${host}]".infoLog()
    }

    /**
     * 设置数据库端口
     *
     * @param[index] 数据库信息的下标
     * @param[port] 端口
     */
    fun setConnectPort(index: Int, port: Int) {
        if (!checkCount(index)) return
        if (port in 0 until 65535) {
            DatabaseConfig.DATABASE_CONNECT_INFO[index].port = port
            "数据库端口设置为[${port}]".infoLog()
        } else
            "数据库端口要在0到65535中".errorLog()
    }

    /**
     * 设置数据库名
     *
     * @param[index] 数据库信息的下标
     * @param[databaseName] 数据库名
     */
    fun setConnectDatabaseName(index: Int, databaseName: String) {
        if (!checkCount(index) || !databaseName.check("数据库名")) return
        DatabaseConfig.DATABASE_CONNECT_INFO[index].databaseName = databaseName
        "数据库名设置为[${databaseName}]".infoLog()
    }

    /**
     * 设置用户名
     *
     * @param[index] 数据库信息的下标
     * @param[username] 用户名
     */
    fun setConnectUsername(index: Int, username: String) {
        if (!checkCount(index) || !username.check("数据库用户名")) return
        DatabaseConfig.DATABASE_CONNECT_INFO[index].username = username
        "数据库用户名设置为[${username}]".infoLog()
    }

    /**
     * 设置密码
     *
     * @param[index] 数据库信息的下标
     * @param[password] 密码
     */
    fun setConnectPassword(index: Int, password: String) {
        if (!checkCount(index) || !password.check("数据库密码")) return
        DatabaseConfig.DATABASE_CONNECT_INFO[index].password = password
        "数据库密码设置为[${password}]".infoLog()
    }

    /**
     * 设置数据库连接信息
     *
     * @param[index] 数据库信息的下标
     * @param[host] 数据库地址
     * @param[port] 数据库端口
     * @param[databaseName] 数据库名称
     * @param[username] 用户名
     * @param[password] 密码
     */
    fun setConnectInfo(index: Int, host: String, port: Int, databaseName: String, username: String, password: String) {
        setConnectHost(index, host)
        setConnectPort(index, port)
        setConnectDatabaseName(index, databaseName)
        setConnectUsername(index, username)
        setConnectPassword(index, password)
    }
}